﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ArxivatDeDocuments.ObjectesDeDades;

namespace ArxivatDeDocuments
{
    class Contexte
    {

        private static List<Client> _clients;
        public static List<Client> getClients()
        { 
            if (_clients == null)
            {
                PropertiesFileParser parser = new PropertiesFileParser(Properties.Settings.Default.pathToPropertiesFile);
                _clients = new List<Client>();

                foreach (KeyValuePair<String, String> kvp in parser.getProperties())
                {
                    _clients.Add(new Client() {Nif = kvp.Key, Nom = kvp.Value});
                }                
            }

            return _clients;
        }

        public static void addClient(Client c)
        {
            _clients.Add(c);
        }

        private static List<Exercici> _exercicis;
        public static List<Exercici> getExercicis()
        {
            if (_exercicis == null)
            {
                _exercicis = new List<Exercici>();
                for (int i = 2010; i < DateTime.Today.Year + 2; i++)
                    _exercicis.Add(new Exercici() { Any = i });
            }

            return _exercicis;
        }

        private static List<Periode> _periodes;
        public static List<Periode> getPeriodes()
        {
            if (_periodes == null)
            {
                _periodes = new List<Periode>();
                _periodes.Add(new Periode() { Codi = "01", Nom = "Gener", Tipus = Periode.enumTipusPeriode.Mensual });
                _periodes.Add(new Periode() { Codi = "02", Nom = "Febrer", Tipus = Periode.enumTipusPeriode.Mensual });
                _periodes.Add(new Periode() { Codi = "03", Nom = "Març", Tipus = Periode.enumTipusPeriode.Mensual });
                _periodes.Add(new Periode() { Codi = "04", Nom = "Abril", Tipus = Periode.enumTipusPeriode.Mensual });
                _periodes.Add(new Periode() { Codi = "05", Nom = "Maig", Tipus = Periode.enumTipusPeriode.Mensual });
                _periodes.Add(new Periode() { Codi = "06", Nom = "Juny", Tipus = Periode.enumTipusPeriode.Mensual });
                _periodes.Add(new Periode() { Codi = "07", Nom = "Juliol", Tipus = Periode.enumTipusPeriode.Mensual });
                _periodes.Add(new Periode() { Codi = "08", Nom = "Agost", Tipus = Periode.enumTipusPeriode.Mensual });
                _periodes.Add(new Periode() { Codi = "09", Nom = "Setembre", Tipus = Periode.enumTipusPeriode.Mensual });
                _periodes.Add(new Periode() { Codi = "10", Nom = "Octubre", Tipus = Periode.enumTipusPeriode.Mensual });
                _periodes.Add(new Periode() { Codi = "11", Nom = "Novembre", Tipus = Periode.enumTipusPeriode.Mensual });
                _periodes.Add(new Periode() { Codi = "12", Nom = "Desembre", Tipus = Periode.enumTipusPeriode.Mensual });
                _periodes.Add(new Periode() { Codi = "1T", Nom = "Primer Trimestre", Tipus = Periode.enumTipusPeriode.Trimestral });
                _periodes.Add(new Periode() { Codi = "2T", Nom = "Segon Trimestre", Tipus = Periode.enumTipusPeriode.Trimestral });
                _periodes.Add(new Periode() { Codi = "3T", Nom = "Tercer Trimestre", Tipus = Periode.enumTipusPeriode.Trimestral });
                _periodes.Add(new Periode() { Codi = "4T", Nom = "Quart Trimestre", Tipus = Periode.enumTipusPeriode.Trimestral });
                _periodes.Add(new Periode() { Codi = "1P", Nom = "Primer Període", Tipus = Periode.enumTipusPeriode.Periodic });
                _periodes.Add(new Periode() { Codi = "2P", Nom = "Segon Període", Tipus = Periode.enumTipusPeriode.Periodic });
                _periodes.Add(new Periode() { Codi = "3P", Nom = "Tercer Període", Tipus = Periode.enumTipusPeriode.Periodic });
                _periodes.Add(new Periode() { Codi = "0A", Nom = "Anual", Tipus = Periode.enumTipusPeriode.Anual });
            }

            return _periodes;
        }

        private static List<Impost> _impostos;
        public static List<Impost> getImpostos()
        {
            if (_impostos == null)
            {
                _impostos = new List<Impost>();
                _impostos.Add(new Impost() { Codi = "303", Nom = "Model 303 Declaracio d'IVA" });
                _impostos.Add(new Impost() { Codi = "340", Nom = "Model 340 Declaració informativa. IVA (llibre registre)" });
                _impostos.Add(new Impost() { Codi = "390", Nom = "Model 390 Resum IVA" });
                _impostos.Add(new Impost() { Codi = "111", Nom = "Model 111 Retencions Treballadors i Professionals" });
                _impostos.Add(new Impost() { Codi = "190", Nom = "Model 190 Resum Anual de Retencions Treballadors i Professionals" });
                _impostos.Add(new Impost() { Codi = "115", Nom = "Model 115 Retencions Locals" });
                _impostos.Add(new Impost() { Codi = "180", Nom = "Model 180 Resum Anual  de  rendes o rendiments procedents de l'arrendament" });
                _impostos.Add(new Impost() { Codi = "200", Nom = "Model 200 Impost de Societats" });
                _impostos.Add(new Impost() { Codi = "202", Nom = "Model 202 Pagament a compte Impost Societats" });
                _impostos.Add(new Impost() { Codi = "130", Nom = "Model 130 Pagament fracionat IRPF" });
                _impostos.Add(new Impost() { Codi = "131", Nom = "Model 131 Pagament fracionat IRPF" });
                _impostos.Add(new Impost() { Codi = "347", Nom = "Model 347 Declaració Anual d'operacions amb Tercers" });
                _impostos.Add(new Impost() { Codi = "123", Nom = "Model 123 Declaració de retencions i ingressos a compte de rendiments del capital mobiliari i altres" });
                _impostos.Add(new Impost() { Codi = "310", Nom = "Model 310 IVA Règim Simplificat" });
                _impostos.Add(new Impost() { Codi = "311", Nom = "Model 311 IVA Règim Simplificat" });
                _impostos.Add(new Impost() { Codi = "309", Nom = "Model 309 IVA Declaració-liquidació no periòdica" });
                _impostos.Add(new Impost() { Codi = "349", Nom = "Model 349 Declaració recapitulativa d'operacions intracomunitàries" });
                _impostos.Add(new Impost() { Codi = "Intrastat", Nom = "Declaració mensual per a l'elaboració de l'estadística dels moviments intracomunitaris" });
                _impostos.Add(new Impost() { Codi = "100", Nom = "Model 100 Declaració de la Renda de les Persones Físiques" });
                _impostos.Add(new Impost() { Codi = "184", Nom = "Model 184 Declaració informativa. Entitats en règim d'atribució de rendes" });
                _impostos.Add(new Impost() { Codi = "202", Nom = "Model 202 Pagament a compte Impost Societats" });
                _impostos.Add(new Impost() { Codi = "193", Nom = "Model 193 Declarció de retencions i ingressos a compte de  rendiments del capital mobiliari i altres" });
                _impostos.Add(new Impost() { Codi = "569", Nom = "Model 569 Impost sobre els Hidrocarburs" });
                _impostos.Add(new Impost() { Codi = "216", Nom = "Model 216 Impost Retencions no Residents" });
                _impostos.Add(new Impost() { Codi = "296", Nom = "Model 296 Resum Anual de Retencions de no Residents" });
                _impostos.Add(new Impost() { Codi = "950", Nom = "Impost sobre les estades en establiments turístics" });
            }

            return _impostos;
        }
    }
}
